package com.lxs.doc.rocess.controller;

import com.lxs.common.utils.R;
import com.lxs.doc.rocess.service.impl.FileConvertServiceImpl;
import com.lxs.doc.rocess.service.impl.FileServcie;
import com.lxs.doc.rocess.vo.FileDO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Slf4j
public class FileController {
    @Autowired
    FileServcie fileService;
    @Autowired
    FileConvertServiceImpl fileConvertService;

    @GetMapping("/upload")
    public R uploadFile(MultipartFile file) throws Exception {
        // 1. 扩展支持的文件类型列表ists
        List<String> supportTypes = List.of(
                "pdf", "docx", "doc", "xlsx", "xls",  // 文档类
                "xmind", "xmind8",                     // XMind类
                "md", "jpg", "png", "jpeg"             // 原有支持类型
        );
        String fileType = FilenameUtils.getExtension(file.getOriginalFilename()).toLowerCase();
        if (!supportTypes.contains(fileType)) {
            throw new Exception("不支持的文件格式，仅支持PDF/WORD/Excel/XMind/Markdown/图片");
        }
        // 2. 新增文件类型标记（区分预览方式）
        int isPreview = 0;
        String previewType = ""; // 标记预览类型：direct(直接预览)/html(转换为HTML)/image(XMind转图片)
        if (List.of("pdf", "jpg", "png", "jpeg").contains(fileType)) {
            isPreview = 1;
            previewType = "direct"; // 原生直接预览
        } else if (List.of("docx", "doc", "xlsx", "xls").contains(fileType)) {
            isPreview = 1;
            previewType = "html"; // 转换为HTML预览
        } else if (List.of("xmind", "xmind8").contains(fileType)) {
            isPreview = 1;
            previewType = "image"; // 转换为图片预览
        }
        // 3. 存储文件元数据时记录预览类型
        FileDO fileDO = new FileDO();
        // （原有赋值逻辑...）
        fileDO.setFileType(fileType);
        fileDO.setIsPreview(isPreview);
        fileDO.setExtendField("previewType", previewType); // 扩展字段存储预览类型
        fileService.save(fileDO);
        // 4. 对需转换的文件触发异步转换任务
        if ("html".equals(previewType) || "image".equals(previewType)) {
            fileConvertService.asyncConvertFile(fileDO.getId(), file.getInputStream(), fileType);
        }
        // （原有返回逻辑...）
        return  R.ok();
    }
}
